#ifndef CPP_SCROLL_VIEW_H
#define CPP_SCROLL_VIEW_H

#include <widget/FrameLayout.h>

class Canvas;

//@brief 内容可滚动控件
//@author cvte
//@description
class ScrollView : public FrameLayout {
   public:
    ScrollView();
    virtual ~ScrollView();

    void addView(View* view);
    void setScrollbarShow(bool show);
    void setScrollbarSize(int x, int y, int width, int height);
    //@method 设置滚动条大小和圆角样式，其中round为0的话，滚动条是长方形，而一般round值要为宽度一般
    void setScrollbarSize(int x, int y, int width, int height, int round);
    void setScrollbarColor(int color);
    void setScrollbarBgColor(int color);
    void addHeaderView(View* view);
    void addFooterView(View* view);
    //@method 如果ScrollView中的控件的内容改变了，需要调用updateContent函数通知ScrollView刷新内容
    void updateContent(void);
    //@method 设置滑动距离，gap >= 0
    void setScrollGap(int gap);
    //@method 获取滑动距离
    int getScrollGap(void);

   protected:
    Canvas* mContentCanvas = nullptr;
    Canvas* mScrollBarCanvas = nullptr;
    Canvas* mScrollBarBgCanvas = nullptr;
    int mScrollBarWidth = 0;
    int mScrollBarHeight = 0;
    int mScrollBarRound = 0;
    int mScrollBarColor = 0;
    int mScrollBarBgColor = 0;

    void onAttachedToWindow();
    void onDetachedFromWindow();
    void onDraw(Canvas& canvas);
    virtual void onDrawContent(); //绘制内容
    bool onTouchEvent(MotionEvent& event);

   private:
    int mScrollBarX = 0;
    int mScrollBarY = 0;
    bool mShowScrollBar = false;
    View* mHeaderView = nullptr;
    View* mFooterView = nullptr;
};

#endif